package cn.edu.jsu.official.dao;

import cn.edu.jsu.official.pojo.dto.*;
import cn.edu.jsu.official.pojo.vo.ArticleVO;
import cn.edu.jsu.official.pojo.vo.LoginVO;
import cn.edu.jsu.official.pojo.vo.MemberToShowVO;
import cn.edu.jsu.official.pojo.vo.UserInfoVO;
import org.bson.types.ObjectId;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author Mo
 * @createTime 2022/3/2 23:11
 * @descripiton
 */
public interface AdminDao {
    Integer queryAccount(String userAccount);

    UserInfo queryAccountInfo(LoginVO loginVO);

    ObjectId uploadFile(MultipartFile multipartFile);

    void deleteFile(Map<String, ObjectId> map);

    ArticleVO insertArticle(ArticleVO articleVO);

    void addProjectAchievement(ProjectAchievement projectAchievement);

    List<Map<String, ObjectId>> deleteProjectAchievementList(List<String> projectAchievementIdList);

    void addContestAchievement(ContestAchievement contestAchievement);

    List<Map<String, ObjectId>> deleteContestAchievementList(List<String> contestAchievementIdList);

    void addGoalInfo(GoalInfo goalInfo);

    void addMemberInfo(MemberInfo memberInfo);

    void addProjectInProgress(ProjectInProgressInfo projectInProgressInfo);

    void addContestInfo(ContestInfo contestInfo);

    void uploadCopyright(CopyrightInfo copyrightInfo);

    void deleteProjectInProgress(List<String> projectIdList);

    List<Map<String, ObjectId>> deleteMemberIdList(List<String> memberIdList);

    void deleteGoalInfo(List<String> goalIdList);

    List<Map<String,ObjectId>> deleteContestInfoList(List<String> contestInfoIdList);

    List<Map<String,ObjectId>>deleteCopyrightList(List<String> copyrightIdList);

    long countMember();

    long countCopyright();

    long countContestAchievement();

    long countProjectAchievement();

    long updateHistoryProcess(HistoryProcess historyProcess);

    long updateProjectAchievement(ProjectAchievement projectAchievement);

    long updateContestInfo(ContestInfo contestInfo);

    long updateGoalInfo(GoalInfo goalInfo);

    void addHistoryProcess(HistoryProcess historyProcess);

    void deleteHistoryProcess(List<String> historyProcessIdList);

    int updateProjectInProgress(ProjectInProgressInfo projectInProgressInfo);

    int updateContestAchievement(ContestAchievement contestAchievement);

    int updateCopyright(CopyrightInfo copyrightInfo);

    int updateMemberInfo(MemberInfo memberInfo);

    UserInfo queryPassword(UserInfo userInfo);

    long updatePassword(UserInfo userInfo);

    List<UserInfoVO> queryUserInfo(UserInfo userInfo);

    void updateMemberShownStatus(MemberToShowVO memberToShowVO);

    void addTechStackInfo(TechStackInfo techStackInfo);

    void deleteTechStackInfo(List<String> listWithoutNulls);

    void updateTechStackInfo(TechStackInfo techStackInfo);

    void updateArticle(String articleId, String articleContent);

    MemberInfo queryMemberById(String memberId);
}
